#ifndef __LINKEDSTACK_H
#define __LINKEDSTACK_H
#ifdef __cplusplus
extern "C"{
#endif
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>//头文件
#include <stdlib.h>
#include <stddef.h>
/* Private types -------------------------------------------------------------*/
//私有结构体、枚举、共用体等
/*1、栈结构体
 *2、栈初始化
 *3、释放栈内存
 *4、栈长度
 *5、增--入栈（进栈）
 *6、删--出栈（弹栈）
 *7、改
 *8、查
 *9、遍历栈
*/

/*1、栈结构体---链式栈，每个单向链表的节点内容（1、数据，2、指向下一个节点的指针）*/
typedef struct Stack
{
	struct Stack *next;//指向下一个栈元素（链表的下一个节点的指针）
	int data;//当前节点存放的数据--当前栈位置的数据
}Stack;

/*整个栈（整个单向链表--1、头部指针，2、单向链表的长度）*/
typedef struct
{
	Stack *head;//定义链表头节点
	size_t length;//链表长度--相当于栈的top指针
}LinkedStack;

/* Private functions----------------------------------------------------------*/
//私有函数定义
/*2、初始化栈*/
void initStack(LinkedStack *stack);
/*3、释放栈内存*/
int destroyStack(LinkedStack *stack);
/*5、返回栈内元素个数*/
size_t getLength(const LinkedStack *stack);
/*6、添加新元素--入栈*/
int push(LinkedStack *stack, int element);
/*8、栈顶元素出栈并返回*/
int pop(LinkedStack *stack);
/*10、遍历栈元素*/
void printStack(LinkedStack *stack);

#ifdef __cplusplus
}
#endif
#endif



